package com.xuecheng.media.service;


import com.xuecheng.base.model.PageParam;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;
import org.springframework.web.bind.annotation.RequestBody;

import java.io.File;
import java.util.List;

/**
 * @description 媒资文件管理业务类
 * @author WYD
 * @date 2022/9/10 8:55
 * @version 1.0
 */
public interface MediaFileService {

 /**
  * @description 媒资文件查询方法
  * @param pageParams 分页参数
  * @param queryMediaParamsDto 查询条件
  * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
  * @author Mr.M
  * @date 2022/9/10 8:57
 */
 public PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParam pageParams, QueryMediaParamsDto queryMediaParamsDto);

 /**
  * 上传文件
  * @param companyId 机构ID
  * @param uploadFileParamDto 文件信息
  * @param localFilePath 本地文件路径
  * @return
  */
 public UploadFileResultDto uploadFile(Long companyId, UploadFileParamDto uploadFileParamDto, String localFilePath);

 /**
  * 检查文件是否存在
  * @param fileMd5 文件的md5
  * @return
  */
 public RestResponse<Boolean> checkFile(String fileMd5);

 /**
  * 检查分块是否存在
  * @param fileMd5  文件的md5
  * @param chunkIndex 分块序号
  * @return
  */
 public RestResponse<Boolean> checkChunk(String fileMd5,int chunkIndex);

 /**
  * 分块文件上传
  * @param fileMd5 文件md5
  * @param chunk 分块的序号
  * @param localChunkFilePath  本地分块文件的路径
  * @return
  */
 public RestResponse uploadChunk(String fileMd5,
                                 int chunk,
                                 String localChunkFilePath);

 /**
  * TODO 合并分块文件
  * @param companyId 机构ID
  * @param fileMd5 文件的Md5
  * @param chunkTotal 分块总和
  * @param uploadFileParamDto 文件信息
  * @return
  */
 public RestResponse mergeChunks(Long companyId,
                                 String fileMd5,
                                 int chunkTotal,
                                 UploadFileParamDto uploadFileParamDto);

 public MediaFiles addMediaFileToDb(Long companyId,
                                    String fileMd5,
                                    UploadFileParamDto uploadFileParamDto,
                                    String bucket,
                                    String objectName);

 /**
  * 从minio下载文件
  * @param bucket
  * @param objectName
  * @return
  */
 public File downloadFileFromMinio(String bucket, String objectName);

 /**
  * 将文件上传到Minio
  * @param localFilePath
  * @param mimeType
  * @param bucket
  * @param objectName
  * @return
  */
 public boolean addMediaTypeToMinio(String localFilePath,
                                     String mimeType,
                                     String bucket,
                                     String objectName);

 /**
  * 将转码后的mp4文件上传到minio
  * @param localFilePath
  * @param mimeType
  * @param bucket
  * @param objectName
  * @return
  */
 public boolean addMediaTypeToMinio2(String localFilePath,
                                    String mimeType,
                                    String bucket,
                                    String objectName);

   /**
    *  根据媒资Id查询文件信息
    * @param mediaId
    * @return
    */
    MediaFiles getFileById(String mediaId);
}
